<script>on mouseUp-- initializeglobal buttonHeader,fieldHeader,dash -- from stack script initglobal scriptCount,textCount,fieldHasText,textStyleList,fileName--answer file "Stack to report on:" of type "stack"if the result is not empty then exit mouseUpelse put it into fileName--set lockscreen to trueset lockmessages to truepush cardset cursor to watchput 0 into scriptCountput 0 into textCountput empty into textStyleList--go card 1 of stack fileNameput fileName & ".OBJS" into fileNameopen file fileNamewrite "Stack Name: " & the short name of this stack & " " &¬the short date & " " & the time & return to file fileNameput empty into propertiesif cantDelete of this stack then put " CD" into propertiesif cantPeek of this stack then put ",CP" after propertiesif cantModify of this stack then put ",CM" after propertiesif cantAbort of this stack then put ",CA" after propertiesput bracket(properties) into propertieswrite dash & return & ¬"• Stack" & properties & ": " & the short name of this stack¬& tellScript("this stack") to file fileNamewrite return & return to file fileName---- cards per backgroundput empty into cardCountrepeat with x = 1 to the number of cardsgo card xput "Counting cards per background: card " & xput x & ", " after line (the number of this bg) of cardCountend repeatrepeat with x = 1 to the number of backgroundsput nicename("bg" && x) into bgTitleif the number of items of line x of cardCount = 1 thenput " card" into cardselseput " cards" into cardsend ifput empty into propertiesif dontSearch of this bg then put " DS" into propertiesif cantDelete of this bg then put ",CD" after propertiesif not (showPict of this bg) then put ",pict not showing" after propertiesput bracket(properties) into propertieswrite " • Bkgnd #" & x & properties & ": " &¬bgTitle & ", has " &¬the number of items of line x of cardCount & cards & ": " &¬char 1 to (length of line x of cardCount - 2) of line x of cardCount &¬return & return to file fileNameend repeatwrite dash to file fileName---- backgrounds and background objectsrepeat with whatbg = 1 to the number of bgsgo bg whatbgif the number of bg flds > 0 or¬the number of bg btns > 0 or¬the script of this bg is not empty then -- do this backgroundput nicename("this bg") into nmwrite dash & "• Background #" & whatbg & ": " & nm &¬tellScript("this background") & return to file fileNameif the number of bg flds > 0 thenwrite return & "Background Fields" & return to file fileNamewrite fieldHeader & return to file fileNamerepeat with whatfld = 1 to the number of bg fldsput "Analyzing background #" & whatbg & ", field " & whatfldget fieldReport("bg fld " & value(whatfld))end repeatend if -- bg fldsif the number of bg btns > 0 thenwrite return & "Background Buttons" & return to file fileNamewrite buttonHeader & return to file fileNamerepeat with whatbtn = 1 to the number of bg btnsput "Analyzing background #" & whatbg & ", button " & whatbtnget buttonReport("bg btn " & value(whatbtn))end repeatend if -- bg btnsend if -- do this backgroundend repeat -- all backgrounds---- cards and card objectsrepeat with whatcd = 1 to the number of cardsgo card whatcdput empty into propertiesif marked of this cd then put " MARKed" into propertiesif dontSearch of this cd then put ",DS" after propertiesif cantDelete of this cd then put ",CD" after propertiesif not (showPict of this cd) then put ",pict not showing" after propertiesput bracket(properties) into propertiesif the number of cd btns > 0 ¬or the number of cd flds > 0 ¬or the script of this cd is not empty ¬or properties is not empty ¬or word 2 of the short name of this cd is not "id" thenwrite dash to file fileNameput nicename("this cd") into cdTitlewrite "• Card #" & whatcd & properties & ": " & cdTitle &¬tellScript("this card") & return to file fileNameif the number of cd flds > 0 thenwrite return & "Card Fields" & return & fieldHeader & return to file fileNamerepeat with whatFld = 1 to the number of cd fldsput "Analyzing card #" & whatcd & ", field #" & whatFldget fieldReport("cd fld " & value(whatFld))end repeat -- cd fldsend if -- cd fldsif the number of cd btns > 0 thenwrite return & "Card Buttons" & return & buttonHeader & return to file fileNamerepeat with whatBtn = 1 to the number of cd btnsput "Analyzing card #" & whatcd & ", button #" & whatBtnget buttonReport("cd btn " & value(whatBtn))end repeat -- cd btnsend if -- cd btnsend if -- do this cardend repeat -- all cards--pop cardclose file fileNameget readchunk(fileName)end mouseUpfunction bracket strif str is not empty thenput "]" after strput "[" into char 1 of strput space before strend ifreturn strend bracketfunction tellScript whatToCountglobal scriptCount -- updatedput empty into retStrif the length of the script of whatToCount > 6 thenadd 1 to scriptCountput " (script #" & scriptCount & ")" into retStrend ifreturn retStrend tellScriptfunction countScript whatToCountglobal scriptCount -- updatedif the length of the script of whatToCount > 6 then add 1 to scriptCountend countScriptfunction countText whatToCheckglobal textCount,fieldHasText -- updatedput false into fieldHasTextif word 1 of whatToCheck is "cd" thenif the value of whatToCheck is not empty thenadd 1 to textCountput true into fieldHasTextend ifelse -- it's a bg fld, and might have shared or non-shared textput the sharedText of whatToCheck into shared -- in case we change itset the sharedText of whatToCheck to true -- try shared firstif the value of whatToCheck is not empty thenadd 1 to textCountput true into fieldHasTextelse -- gonna have to look at every single instance of this bg fldset the sharedText of whatToCheck to false -- try non-sharedrepeat with x = 1 to the number of cards of this backgroundgo card x of this backgroundif not (the value of whatToCheck is empty) thenadd 1 to textCountput true into fieldHasTextexit repeat -- doneend ifend repeatend ifset the sharedText of whatToCheck to shared -- in case we changed itend ifend countTextfunction reportLine1 strglobal textStyleList -- updatedput the textStyle of (str) into textStyleListput pad(word 3 of str,2) into cnum -- number of the objectput nicename(str) into nmput pad(char 1 to 13 of nm,14) into name -- name of the objectput pad(char 1 to 4 of textFont of (str),5) into fontput pad(textSize of (str),3) into Szput pad(textHeight of (str),3) into Htput pad(char 1 of textAlign of (str),2) into Aput pad(char 1 of visible of (str),2) into Vput pad(rect of (str),16) into rectput pad(char 1 to 2 of style of (str),3) into stylreturn (cnum & name & font & sz & ht & A & V & rect & styl)end reportLine1function reportLine2a str,txNo,fieldHasTextput pad(char 1 of lockText of (str),3) into LTput pad(char 1 of showLines of (str),3) into SLput pad(char 1 of wideMargins of (str),3) into WMput pad(char 1 of autoTab of (str),3) into ATput pad(char 1 of fixedLineHeight of (str),3) into FHput pad(char 1 of dontWrap of (str),3) into DWput pad(char 1 of dontSearch of (str),3) into DSif word 1 of str is "bg" thenif (sharedText of (str))then put "ST" into char 2 to 3 of DSend ifif not (fieldHasText) then put "--" into txNoput pad(txNo,5) into Txreturn fToBlank(LT & SL & WM & AT & FH & DW & DS & Tx)end reportLine2afunction reportLine2b strput pad(char 1 of showName of (str),3) into SNput pad(char 1 of autoHilite of (str),3) into AHput pad(char 1 of sharedHilite of (str),3) into SHput pad(char 1 of hilite of (str),3) into HLif word 1 of str is "bg" ¬then if (the sharedHilite of (str) is false) ¬then put " --" into HLget last word of icon of (str)if it = 0 then put "-----" into itput pad(it,6) into ikonreturn fToBlank(SN & AH & SH & HL & ikon & " ")end reportLine2bfunction reportLine3 str,scriptCountif the script of (str) is emptythen return " --"else return pad(scriptCount,4)end reportLine3function fToBlank stringrepeat with x = 1 to the length of stringif char x of string is "f"then put space into char x of stringend repeatreturn stringend fToBlankfunction fieldReport strglobal scriptCount,fieldHasText,fieldHasTextglobal textCount,textStyleList,fileNameget countScript(str)get countText(str)write reportLine1(str) & reportLine2a(str,textCount,fieldHasText)¬& reportLine3(str,scriptCount) & return to file fileNameif textStyleList <> "plain" and textStyleList <> emptythen write " style: " & textStyleList & return ¬to file fileNameend fieldReportfunction buttonReport strglobal scriptCount,textStyleList,fileNameget countScript(str)write reportLine1(str) & reportLine2b(str) &¬reportLine3(str,scriptCount) & return to file fileNameif textStyleList <> "plain" and textStyleList <> emptythen write " style: " & textStyleList & return ¬to file fileNameend buttonReportfunction pad string,widthput the length of string into startLengthrepeat (width - startLength) timesput space before stringend repeatreturn stringend pad</script>
</part>
<part>
<id>4</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>224</left>
<top>23</top>
<right>305</right>
<bottom>42</bottom>
</rect>
<style>roundrect</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Monaco</font>
<textSize>9</textSize>
<textStyle>plain</textStyle>
<name>Field Texts</name>
<script>on mouseUp-- initializeglobal dash,textCount,filenameanswer file "Stack to get field texts of:" of type "stack"if the result is not empty then exit mouseUpelse put it into fileName--set lockscreen to trueset lockmessages to truepush cardset cursor to watchput 0 into textCount--go card 1 of stack fileNameput fileName & ".FLDS" into fileNameopen file fileNamewrite "Stack Name: " & the short name of this stack & " " &¬the short date & " " & the time & return & dash & return to file fileName---- background fieldsrepeat with whatbg = 1 to the number of bgsgo bg whatbgif the number of bg flds > 0 then -- do this backgroundrepeat with whatfld = 1 to the number of bg fldsput "Fetching text of background #" & whatbg & ", field " & whatfldget fieldReport("bg fld " & value(whatfld))end repeatend if -- do this backgroundend repeat -- all backgrounds-- cards and card objectsrepeat with whatcd = 1 to the number of cardsgo card whatcdif the number of cd flds > 0 then -- do this cardrepeat with whatFld = 1 to the number of cd fldsput "Fetching text of card #" & whatcd & ", field #" & whatFldget fieldReport("cd fld " & value(whatFld))end repeat -- cd fldsend if -- do this cardend repeat -- all cards--pop cardclose file fileNameget readchunk(filename)end mouseUpfunction fieldReport whatToCheckglobal textCount,filename,dashput false into fieldHasTextif word 1 of whatToCheck is "cd" then -- simpleif the value of whatToCheck is not empty thenadd 1 to textCountwrite "• Text #" & textCount && "-- Card " & ¬the number of this card & ", " & whatToCheck ¬& ":" && nicename(whatToCheck) & return & return & " " &¬the value of whatToCheck & return & return & dash & return ¬to file filenameend ifelse -- it's a bg fld, and might have shared or non-shared text or bothput the sharedText of whatToCheck into shared -- in case we change itput false into headerWrittenset the sharedText of whatToCheck to true -- try shared firstif the value of whatToCheck is not empty thenadd 1 to textCountput true into headerWrittenwrite "• Text #" & textCount && "-- Background " &¬the number of this bg & ", " & whatToCheck ¬& ":" && nicename(whatToCheck) & return & " •[shared]" & ¬return & return & " " & the value of whatToCheck & return ¬to file filenameend ifset the sharedText of whatToCheck to false -- try non-shared nextrepeat with x = 1 to the number of cards of this backgroundgo card x of this backgroundif not (the value of whatToCheck is empty) thenif not (headerWritten) thenadd 1 to textCountput true into headerWrittenwrite "• Text #" & textCount && "-- Background " & ¬the number of this bg & ", " & whatToCheck ¬& ":" && nicename(whatToCheck) & return to file filenameend ifwrite " •[non-shared: card " & the number of this card & "]" ¬& return & return & " " & the value of whatToCheck & return ¬& return to file filenameend ifend repeatset the sharedText of whatToCheck to shared -- in case we changed itif headerWritten then write return & dash & return to file filenameend ifend fieldReport</script>
</part>
<part>
<id>5</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>395</left>
<top>23</top>
<right>478</right>
<bottom>38</bottom>
</rect>
<style>roundrect</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Monaco</font>
<textSize>9</textSize>
<textStyle>plain</textStyle>
<name>Display File</name>
<script>on mouseUplock screenif the short name of me is "Help" thenset the name of me to "Display File"elseset the name of me to "Help"end ifset the visible of bg fld "view" to (the short name of me is "Help")unlock screenend mouseUp</script>
</part>
<part>
<id>6</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>479</left>
<top>19</top>
<right>504</right>
<bottom>39</bottom>
</rect>
<style>transparent</style>
<showName> <false /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>21700</icon>
<textAlign>center</textAlign>
<font>Chicago</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<name>Home</name>
<script>on mouseUpgo homeend mouseUp</script>
</part>
<part>
<id>9</id>
<type>button</type>
<visible> <true /> </visible>
<reserved5> 0 </reserved5>
<reserved4> 0 </reserved4>
<reserved3> 0 </reserved3>
<reserved2> 0 </reserved2>
<reserved1> 0 </reserved1>
<enabled> <true /> </enabled>
<rect>
<left>307</left>
<top>23</top>
<right>363</right>
<bottom>42</bottom>
</rect>
<style>roundrect</style>
<showName> <true /> </showName>
<highlight> <false /> </highlight>
<autoHighlight> <true /> </autoHighlight>
<sharedHighlight> <true /> </sharedHighlight>
<family>0</family>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>center</textAlign>
<font>Monaco</font>
<textSize>9</textSize>
<textStyle>plain</textStyle>
<name>Scripts</name>
<script>on mouseUp-- initializeglobal dash -- from stack script initglobal scriptCount,fileName--answer file "Stack to get scripts of:" of type "stack"if the result is not empty then exit mouseUpelse put it into fileName--set lockscreen to trueset lockmessages to truepush cardset cursor to watchput 0 into scriptCount--go card 1 of stack fileNameput fileName & ".SCPS" into fileNameopen file fileNamewrite "Stack Name: " & the short name of this stack & " " &¬the short date & " " & the time & return & dash & return ¬to file fileName-- stackif the length of the script of this stack > 6 then -- do this stackwrite "• Stack" & ": " & the short name of this stack¬& tellScript() & return & return to file fileNameget the script of this stackwrite it & return & return & dash & return to file filenameend if-- backgrounds and background objectsrepeat with whatbg = 1 to the number of bgsgo bg whatbgif the length of the script of this bg > 6 then -- do this backgroundput "Fetching script of background #" & whatbgput nicename("this bg") into nmwrite "• Background #" & whatbg & ": " & nm &¬tellScript() & return & return to file fileNameget the script of this bgwrite it & return & return & dash & return to file fileNameend ifif the number of bg flds > 0 thenrepeat with whatfld = 1 to the number of bg fldsif the length of the script of bg fld whatfld > 6 then -- do this fldput "Fetching script of background #" & whatbg & ", field " & whatfldget writescript("Background Field" && whatfld,whatbg)end ifend repeatend if -- bg fldsif the number of bg btns > 0 thenrepeat with whatbtn = 1 to the number of bg btnsif the length of the script of bg btn whatbtn > 6 then -- do this btnput "Fetching script of background #" & whatbg & ", button " & whatbtnget writescript("Background Button" && whatbtn,whatbg)end ifend repeatend if -- bg btnsend repeat -- all backgrounds---- cards and card objectsrepeat with whatcd = 1 to the number of cardsgo card whatcdif the length of the script of this cd > 6 thenput "Fetching script of card #" & whatcdput nicename("this cd") into nmwrite "• Card #" & whatcd & ": " & nm &¬tellScript() & return & return to file fileNameget the script of this cdwrite it & return & return & dash & return to file fileNameend ifif the number of cd flds > 0 thenrepeat with whatfld = 1 to the number of cd fldsif the length of the script of cd fld whatfld > 6 then -- do this fldput "Fetching script of card #" & whatcd & ", field " & whatfldget writescript("Card Field" && whatfld,whatcd)end ifend repeatend if -- cd fldsif the number of cd btns > 0 thenrepeat with whatbtn = 1 to the number of cd btnsif the length of the script of cd btn whatbtn > 6 then -- do this btnput "Fetching script of card #" & whatcd & ", button " & whatbtnget writescript("Card Button" && whatbtn,whatcd)end ifend repeatend if -- cd btnsend repeat -- all cards--pop cardclose file fileNameget readchunk(fileName)end mouseUpfunction tellScriptglobal scriptCount -- updatedadd 1 to scriptCountput " (script #" & scriptCount & ")" into retStrreturn retStrend tellScriptfunction writescript whatobj,cdorbgnumglobal filename,dashput nicename(whatobj) into nmwrite "• " & word 1 of whatobj && "#" & cdorbgnum & "," &&¬word 2 of whatobj && "#" & word 3 of whatobj & ":" && nm &¬tellScript() & return & return to file fileNameget the script of whatobjwrite it & return & return & dash & return to file fileNameend writescript</script>
<script>on mouseUpshow cd fld "About the author"end mouseUp</script>
</part>
<part>
<id>13</id>
<type>field</type>
<visible> <false /> </visible>
<dontWrap> <false /> </dontWrap>
<dontSearch> <false /> </dontSearch>
<sharedText> <false /> </sharedText>
<fixedLineHeight> <false /> </fixedLineHeight>
<autoTab> <false /> </autoTab>
<lockText> <true /> </lockText>
<rect>
<left>8</left>
<top>17</top>
<right>284</right>
<bottom>175</bottom>
</rect>
<style>shadow</style>
<autoSelect> <false /> </autoSelect>
<showLines> <false /> </showLines>
<wideMargins> <true /> </wideMargins>
<multipleLines> <false /> </multipleLines>
<reservedFamily> 0 </reservedFamily>
<titleWidth>0</titleWidth>
<icon>0</icon>
<textAlign>left</textAlign>
<font>Geneva</font>
<textSize>12</textSize>
<textStyle>plain</textStyle>
<textHeight>16</textHeight>
<name>About the author</name>
<script></script>
</part>
<content>
<layer>background</layer>
<id>2</id>
<text><span class="style2"> ΓÇó"OBJECTS" puts a tabular description of a stack into a text file called "[stackname].OBJS", in 80-column format. This description should be viewed/printed in a small monospaced font (like this one!). Stack Properties are </span><span class="style3">C</span><span class="style2">ant</span><span class="style3">D</span><span class="style2">elete, </span><span class="style3">C</span><span class="style2">ant</span><span class="style3">P</span><span class="style2">eek, </span><span class="style3">C</span><span class="style2">ant</span><span class="style3">M</span><span class="style2">odify, </span><span class="style4">C</span><span class="style2">ant</span><span class="style3">A</span><span class="style2">bort. Background Properties are </span><span class="style3">D</span><span class="style2">ont</span><span class="style3">S</span><span class="style2">earch, </span><span class="style3">C</span><span class="style2">ant</span><span class="style3">D</span><span class="style2">elete. Card Properties are </span><span class="style3">Mark</span><span class="style2">ed, </span><span class="style3">D</span><span class="style2">ont</span><span class="style3">S</span><span class="style2">earch, and </span><span class="style3">C</span><span class="style2">ant</span><span class="style3">D</span><span class="style2">elete. These are notated only if True. Field and Button Properties are Number (#), Name, Font, </span><span class="style3">S</span><span class="style2">i</span><span class="style3">z</span><span class="style2">e (of Font), </span><span class="style3">H</span><span class="style2">eigh</span><span class="style3">t</span><span class="style2"> (of Font), </span><span class="style3">A</span><span class="style2">lignment (</span><span class="style3">L</span><span class="style2">eft, </span><span class="style4">C</span><span class="style2">enter, </span><span class="style3">R</span><span class="style2">ight), </span><span class="style3">V</span><span class="style2">isible (</span><span class="style3">T</span><span class="style2">rue or </span><span class="style3">F</span><span class="style2">alse), Rect, </span><span class="style3">St</span><span class="style2">yle (</span><span class="style3">tr</span><span class="style2">ansparent, </span><span class="style3">op</span><span class="style2">aque, </span><span class="style3">re</span><span class="style2">ctangle, etc.). TextStyle is reported on a separate line if not Plain. Additional Field Properties are </span><span class="style3">L</span><span class="style2">ock</span><span class="style3">T</span><span class="style2">ext, </span><span class="style3">S</span><span class="style2">how</span><span class="style3">L</span><span class="style2">ines, </span><span class="style3">W</span><span class="style2">ide</span><span class="style3">M</span><span class="style2">argins, </span><span class="style3">A</span><span class="style2">uto</span><span class="style3">T</span><span class="style2">ab, </span><span class="style3">F</span><span class="style2">ixed</span><span class="style3">H</span><span class="style2">eight, </span><span class="style3">D</span><span class="style2">ont</span><span class="style3">W</span><span class="style2">rap, </span><span class="style3">D</span><span class="style2">ont</span><span class="style3">S</span><span class="style2">earch. </span><span class="style3">S</span><span class="style2">hared</span><span class="style3">T</span><span class="style2">ext (background fields only) appears under DontSearch if true, since then DontSearch is automatically true. Additional Button Properties are </span><span class="style3">S</span><span class="style2">how</span><span class="style3">N</span><span class="style2">ame, </span><span class="style3">A</span><span class="style2">uto</span><span class="style3">H</span><span class="style2">ilite, </span><span class="style3">S</span><span class="style2">hared</span><span class="style3">H</span><span class="style2">ilite (bkgnd buttons only), and </span><span class="style3">H</span><span class="style2">i</span><span class="style3">L</span><span class="style2">ite (only for cd btns and SharedHilite bg btns). If a field contains text, or if a stack, background, card, field, or button contains a script, the text or script is given a number, keyed to the texts and scripts reported by "FIELD TEXTS" and "SCRIPTS". ΓÇó"FIELD TEXTS" lists the texts of the fields of a stack (those that have texts) into a text file called "[stackname].FLDS". Formatting is not shown (sorry). ΓÇó"SCRIPTS" lists the scripts of a stack & its objects into a textfile called "[stackname].SCPS". ΓÇó"DISPLAY FILE / HELP" toggles display of the last created text file with these notes. Additional buttons allow you to read a very large textfile in chunks, so you can peruse </span><span class="style5">the whole textfile</span><span class="style2"> without leaving HyperCard. </span></text>
</content>
<content>
<layer>card</layer>
<id>13</id>
<text><span class="style2">tack Tabulator.Based on an idea ©1989 MindCraft™.By Matt Neuburg, Professor of Classics,Swarthmore College.Feel free to distribute/modify; I take no responsibility for anything whatever.Comments to (internet): neuburg@campus.swarthmore.edu </span><span class="style6"> [click anywhere for go-away]</span></text>